home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 07 - 1991 / 07.05 May 91 / Math Parser ƒ / ParserProcs / ParserDriver < prev    next >
Encoding:
Text File  |  1990-10-31  |  3.8 KB  |  209 lines  |  [TEXT/PJMM]

  1.  
  2. program ParserDriver;
  3.  
  4.     uses
  5.         ParserGlobals, Eval, ParserOps;
  6.  
  7.     label
  8.         222, 333, 444, 997, 998, 999;
  9.  
  10.  
  11.     var
  12.  
  13.         i, j, k, place, numnodes, mtot: integer;
  14.         windowsize: rect;
  15.         line, modline, result: str255;
  16.         ch: char;
  17.         ty: hdlstringarray0;
  18.         savename: stringsize;
  19.         tytokentype: hdlstringarray0;
  20.         flag: hdlflagtype;
  21.  
  22.     procedure AllocateParserHandles;
  23.  
  24.     begin
  25.         strvar := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
  26.         strvartokentype := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
  27.         val := hdlextendarray(NewHandle(SizeOf(extendarray)));
  28.         tfile := hdltextfilearray(NewHandle(SizeOf(textfilearray)));
  29.         tfilename := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
  30.         tfileopen := hdlbooleanfilearray(NewHandle(SizeOf(booleanfilearray)));
  31.         flag := hdlflagtype(NewHandle(SizeOf(flagtype)));
  32.     end;
  33.  
  34.     procedure DisposeOfParserHandles;
  35.  
  36.     begin
  37.         DisposHandle(handle(strvar));
  38.         DisposHandle(handle(strvartokentype));
  39.         DisposHandle(handle(val));
  40.         DisposHandle(handle(tfile));
  41.         DisposHandle(handle(tfilename));
  42.         DisposHandle(handle(tfileopen));
  43.         DisposHandle(handle(flag));
  44.     end;
  45.  
  46.  
  47.  
  48. begin
  49.     varfilename := 'variablefile';
  50.  
  51.     decplace := 20;
  52.  
  53.     decplaceplus10 := decplace + 10;
  54.  
  55.     AllocateParserHandles;
  56.  
  57.     for i := 1 to maxnumberfiles do
  58.         tfileopen^^[i] := false;
  59.  
  60.     Hideall;
  61.     setrect(windowsize, 0, 38, 520, 340);
  62.     settextrect(windowsize);
  63.     showtext;
  64.  
  65.     numberfiles := 0;
  66.     readtfile;
  67.     readvariables;
  68.  
  69. 998:
  70.     error := '';
  71.     numnodes := 0;
  72.  
  73.     write(blank);
  74.     readln(line);
  75.  
  76.  
  77.     for i := 1 to numberfiles do
  78.         begin
  79.             modline := line;
  80.             place := pos(tfilename^^[i], modline);
  81.             if place <> 0 then
  82.                 begin
  83.                     if tfileopen^^[i] then
  84.                         goto 333;
  85.                     if not tfileopen^^[i] then
  86.                         open(tfile^^[i], tfilename^^[i]);
  87. 333:
  88.                     tfileopen^^[i] := true;
  89.                     reset(tfile^^[i]);
  90. 444:
  91.                     if not eof(tfile^^[i]) then
  92.                         begin
  93.                             readln(tfile^^[i], modline);
  94.                             result := eval(modline);
  95.                             if (error <> '') then
  96.                                 goto 998;
  97.                             goto 444;
  98.                         end;
  99. {close(tfile^^[i]);}
  100.                     numvariables := numvariables + 1;
  101.                     strvar^^[numvariables] := tfilename^^[i];
  102.                     strvartokentype^^[numvariables] := 'real';
  103.                     readstring(result, val^^[numvariables]);
  104.                     writeln(result);
  105.                     goto 998;
  106.                 end;
  107.         end;
  108.  
  109.     if (pos('listfiles', line) <> 0) then
  110.         if numberfiles > 0 then
  111.             begin
  112.                 listtfiles;
  113.                 goto 998;
  114.             end;
  115.  
  116.     if (pos('create', line) <> 0) then
  117.         begin
  118.             writeln('write in the name of your file');
  119.             write(blank);
  120.             readln(savename);
  121.             createtfile(savename);
  122.             goto 998;
  123.         end;
  124.  
  125.     if (pos('dec', line) <> 0) then
  126.         begin
  127.             setdecimal;
  128.             goto 998;
  129.         end;
  130.  
  131.     if (pos('listfile', line) <> 0) and (pos('listfiles', line) = 0) then
  132.         begin
  133.             write(blank);
  134.             readln(savename);
  135.             listtfile(savename);
  136.             goto 998;
  137.         end;
  138.  
  139.  
  140.     if (pos('cls', line) <> 0) then
  141.         begin
  142.             clearscreen(line);
  143.             goto 998;
  144.         end;
  145.  
  146.     if (pos('clm', line) <> 0) then
  147.         begin
  148.             numvariables := 0;
  149.             goto 998;
  150.         end;
  151.  
  152.     if pos('delete', line) <> 0 then
  153.         begin
  154.  
  155. 222:
  156.             write(blank);
  157.             readln(savename);
  158.             if (savename = '') then
  159.                 goto 998;
  160.             deletevariable(savename);
  161.             goto 222;
  162.         end;
  163.  
  164.     if line = '' then
  165.         goto 998;
  166.  
  167.     if (line = 'stop') then
  168.         goto 999;
  169.  
  170.     if (numvariables > 0) and (pos('listv', line) <> 0) then
  171.         begin
  172.             listvariables;
  173.             goto 998;
  174.         end;
  175.  
  176.  
  177.     result := eval(line);
  178.     writeln(result);
  179.  
  180.     goto 998;
  181.  
  182. 999:
  183.  
  184.     if numvariables > 0 then
  185.         begin
  186.             writeln('Do you want to save your current variables for the next session? y/n');
  187. 997:
  188.             writeln(blank);
  189.             readln(ch);
  190.             if (ch = 'n') or (ch = 'N') then
  191.                 begin
  192.                     rewrite(varfile);
  193.                     writeln('');
  194.                 end;
  195.             if (ch = 'y') or (ch = 'Y') then
  196.                 storevariables;
  197.             if not ((ch = 'y') or (ch = 'Y') or (ch = 'n') or (ch = 'N')) then
  198.                 begin
  199.                     writeln('Should be a   y, Y, n, or N ');
  200.                     goto 997;
  201.                 end;
  202.             close(varfile);
  203.         end;
  204.  
  205.  
  206.     DisposeOfParserHandles;
  207.  
  208.  
  209. end.